package com.mdnote.practice.dp.stock;

/**
 * @author Rhythm-2019
 * @version 1.0
 * @date 2020/9/22
 * @description 最佳买卖股票时机含冷冻期
 */
public class LeetCode309 {


    public static void main(String[] args) {
        LeetCode309 leetCode309 = new LeetCode309();
        int res = leetCode309.maxProfit(new int[]{1,2,3,0});
        System.out.println(res);
    }
    public int maxProfit(int[] prices) {

        if (prices.length <= 1) {
            return 0;
        }
        int[][] dp = new int[prices.length][2];

        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        // 第二天没有持有股票，可能是第一天买了第二天卖了
        dp[1][0] = Math.max(dp[0][0], dp[0][1] + prices[1]);
        // 第二天持有股票，第一天已经有了，或者第二天刚买
        dp[1][1] = Math.max(dp[0][1], -prices[1]);
        for (int i = 2; i < dp.length; i++) {
            // 当天没有持有股票，要么昨天卖了，要么昨天就没买
            dp[i][0] = Math.max(dp[i - 1][1] + prices[i], dp[i - 1][0]);
            // 当天持有股票，要么是前天买的，要么昨天就有了
            dp[i][1] = Math.max(dp[i - 2][0] - prices[i], dp[i - 1][1]);
        }

        return dp[dp.length - 1][0];
    }


}
